calculate.multiple<-function(fn,base.par.list,key.index=1,range=NULL,n=20,...) {
  nb<-length(base.par.list)
  rh<-range[2]
  rl<-range[1]
  
  x.list<-rl+c(0:(n-1))*(rh-rl)/(n-1)
  
  result<-NULL
  for(x in x.list) {
    result.row<-x
    for(i in 1:nb) {
      par<-base.par.list[[i]]
      par[key.index]<-x
#      cat(x," ",par,"\n")
      result.row<-c(result.row,fn(par,...))
    }
    result<-rbind(result,result.row)
  }
  result
}


plot.multiple<-function(x,y,legend.list,file=NULL,main=NULL,xlab=NULL,ylab=NULL,...) {
	if(!is.null(file)) jpeg(file=file)
	yl<-range(y)
	if(yl[2]<1.1) yl<-c(0,1)
#	yl<-c(yl[1],yl[2]+(yl[2]-yl[1])*0.2)
#	plot(loess.smooth(x,y[,1]),main=main,xlab=xlab,ylab=ylab,xlim=range(x),ylim=yl,col=1,type="l")
	plot(x,y[,1],main=main,xlab=xlab,ylab=ylab,xlim=range(x),ylim=yl,lty=1,col=1,type="l")
	for(i in 2:ncol(y)) {
#		points(loess.smooth(x,y[,i]),col=i,type="l")
		points(x,y[,i],lty=i,col=i,type="l")
	}
	if(yl[2]==1) legend("bottomleft",legend.list,lty=c(1:ncol(y)),col=c(1:ncol(y)))
	else legend("bottomleft",legend.list,lty=c(1:ncol(y)),col=c(1:ncol(y)))
	if(!is.null(file)) dev.off()
}

plot.smooth<-function(data,n=5) {
  m1<-floor(min(data[,1])/n)
  m2<-floor(max(data[,1])/n)
  new.data<-NULL
  
  for(i in m1:m2) {
    ndr<-i*n
    for(j in 2:ncol(data)) {
      ndr<-c(ndr,sum(subset(data[,j],(data[,1]>=i*n)&(data[,1]<(i+1)*n))))
    }
    new.data<-rbind(new.data,ndr)
  }  
  
  dimnames(new.data)[[2]]<-dimnames(data)[[2]]
  new.data
}